#ifndef _EVENT_
#define _EVENT_

namespace air {

	struct Event {
		Event() {}
		virtual ~Event() {}
		virtual void callback() = 0;
	};

	template <class T>
	struct SEvent: public Event {
		void (T::*H)();
		T* S;

		SEvent(T* _S, void (T::*_H)()): H(_H), S(_S) {}
		~SEvent() {}
		void callback() { (((T*)S)->*H)();}
	};
}

#endif